<?php

class Afiliado extends BaseModel {

    static $table_name = 'afiliados';
    static $primary_key = 'idafiliado';
    static $has_many = array(
        array(
            '_ordenes',
            'class_name' => 'Orden',
            'foreign_key' => 'idafiliado'
        ),
        array(
            '_cuentas_corriente',
            'conditions' => 'tipopersona = "A"',
            'class_name' => 'CuentaCorriente',
            'foreign_key' => 'idpersona'
        ),
        array(
            '_recetarios',
            'class_name' => 'Recetario',
            'foreign_key' => 'idafiliado'
        )
    );
    static $belongs_to = array(
        array(
            '_grupo',
            'class_name' => 'GrupoFamiliar',
            'foreign_key' => 'grupoFamiliar'
        )
    );

    function es_pariente($afiliado) {
        return ($this->_grupo->idgrupofamiliar == $afiliado->_grupo->idgrupofamiliar) ? true : false;
    }

    function excede_cuenta_corriente() {
        return $this->_grupo->_plan->_empresa->excede_cuenta_corriente($this);
    }

    function excede_limite_mensual_ordenes() {
        $limite = GeneralConfig::find_by_nombre('limite_mensual');
        $current_month = date('m');
        $id = $this->id;
        $orden = Orden::find_by_sql("SELECT * FROM ordenes 
                                        WHERE month(fechaEmision) = $current_month 
                                              AND web_idplus IS NOT NULL
                                              AND idAfiliado = $id");

        return $limite->valor() <= count($orden) ? true : false;
    }

    function excede_limite_mensual_recetarios(){
        $limite = GeneralConfig::find_by_nombre('limite_mensual_recetarios');
        $current_month = date('m');
        $id = $this->id;
        $recetarios = Orden::find_by_sql("SELECT * FROM recetarios 
                                             WHERE month(fecha) = $current_month 
                                                  AND idafiliado = $id");
        return $limite->valor() <= count($recetarios) ? true : false;
    }
    
    function ultima_orden_web() {
        $id = $this->id;
        $orden_array = Orden::find_by_sql("SELECT * FROM ordenes 
                                                WHERE web_idplus IS NOT NULL
                                                      AND idAfiliado = $id
                                                ORDER BY fechaEmision
                                                LIMIT 1");
        return $orden_array[0];
    }

    function activo() {
        return $this->estado == 1 ? true : false;
    }

    function edad() {
        $fecha_nacimiento = date_create($this->fechanacimiento);
        if($fecha_nacimiento->format("Y") == '-0001'):
            return "No definida";
        endif;
        
        $intervalo = date_diff($fecha_nacimiento, date_create());
        return $intervalo->format("%Y");
    }

    function nombre_completo() {
        return $this->nombre . " " . $this->apellido;
    }

    function get_empresa() {
        return $this->_grupo->_plan->_empresa;
    }

    /* Devuelve true si este afiliado pertenece a la empresa enviada por parámetro. */

    function pertenece_empresa($empresa) {
        // Si la empresa por parámetro es Sistema Médico y el afiliado es de OSPe, 
        // se considera que pertenece a la empresa. 
        if ($empresa->nombreempresa == "Sistema Médico" &&
                $this->get_empresa()->nombreempresa == "OSPE") {
            return true;
        }

        return ($this->get_empresa()->id == $empresa->id) ? true : false;
    }

    function get_nombre_completo() {
        if ($this->nombre && $this->apellido):
            return $this->nombre . ' ' . $this->apellido;
        elseif ($this->nombre):
            return $this->nombre;
        else:
            return $this->apellido;
        endif;
    }

    function is_admin() {
        return false;
    }
    
    function create_recetario(){
        $recetario = new Recetario();
        $recetario->_afiliado = $this;
        array_push($this->_recetarios, $recetario);
        
    }
    
    function get_plan(){
        return $this->_grupo->_plan;
    }

}

?>
